package com.elinshaw.hadoopdev;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;

/**
 * partitioner阶段
 * map数据传入reduce之前需要进行数据的排序、分组。而分组就是由Partitioner
 * 对map阶段的输出进行分区map的分区数直接决定reduce task的数量(一般来说是一对一)
 * 有相同key的键/值对会送到同一个Reducer节点中进行归并。
 * 哪个key到哪个Reducer的分配过程是由Partitioner规定的
 * 在一些集群应用中，例如分布式缓存集群中，缓存的数据大多都是靠哈希函数来进行数据的均匀分布的，在Hadoop中也不例外
 * 分区的作用是将分区后的数据进行分门别类的保存
 *
 * @author Administrator
 */
public class MyPartitioner extends Partitioner<Text, LongWritable> {

    /**
     * @param text          Mapper输出的key
     * @param longWritable  Mapper输出的value
     * @param numPartitions
     * @return
     */
    @Override
    public int getPartition(Text text, LongWritable longWritable, int numPartitions) {
        return text.hashCode() % 3;
    }


}
